// 中间件
const jwt = require('jsonwebtoken')
const {UnauthorizedError} = require('../utils/errors')
const {success,failure} = require('../utils/response')

module.exports = async (req,res,next) => {
    try {
        // 一般token存在请求头中
        // 最主要的原因还是head和body是分开传输的，当body非常大时，
        //后端可以先解析head中的身份认证参数，当认证失败时，可以不再传输body，达到快速响应以及节省流量
        const {token} = req.headers
        if(!token){
            throw new UnauthorizedError('当前接口需要认证才能访问')
        }
        // 验证token是否正确
        const decoded = jwt.verify(token,process.env.SECRET)
        // 从jwt中解析出之前存入的userId
        const {userId} = decoded
        // 如果通过验证，将userId挂载到req上
        req.userId = userId 
        next()
    } catch (error) {
        failure(res,error)
    }
}